前幾天說完了變數與資料型態,而在普通常見的程式語言中,條件運算子和迴圈運算子已經是非常重要的元素了,在更看中決策與交易策略的全自動EA中,更是不可或缺。它們為我們提供了控制程序流程和執行不同操作的關鍵工具。條件運算子使我們能夠根據特定條件的真偽來做出不同的決策,而迴圈運算子則使我們能夠有效地處理重複性任務。所以今天就來分享一下關於這兩個元素的運用。
條件運算子讓我們能夠創建具有多條分支的邏輯,根據不同情況執行不同的程式碼塊。它們是在制定決策、處理例外情況以及根據不同條件執行不同操作時的重要工具。
用於控制程式的執行流程,根據特定條件的真偽(TRUE/FALSE)來執行不同的程式碼區塊。IF運算子通常與ELSE或ELSE IF一起使用,以創建多條分支的程式邏輯。
if (條件)
{
// 如果條件成立,執行這裡的程式碼
}
else if (另一個條件)
{
// 如果第一個條件不成立,且這個條件成立,執行這裡的程式碼
}
else
{
// 如果以上所有條件都不成立,執行這裡的程式碼
}
此程式碼中,所有條件皆為Boolean值。
當if運算子內僅有一個運算式時,可以省略括弧,並將其放在同一行中。
bool boolean = true;
if(boolean == true)Print(true);
交易策略中的決策:在MQL5中,交易策略通常使用IF運算子來檢查市場條件,例如價格、指標信號等,然後根據這些條件來執行交易操作。
自定義指標:自定義指標(Custom Indicators)也可以使用IF運算子,以便根據市場數據來繪製自己的指標線或圖形。
錯誤處理:當程式可能遇到錯誤或例外情況時,IF運算子用於檢查錯誤條件,然後執行錯誤處理程式碼。
多條件檢查:可以使用IF和else if來執行多條件檢查,以根據不同情況執行不同的操作。
選擇性執行程式碼:與其他程式語言一樣,IF運算子可以用於僅在特定條件下執行某段程式碼。
三元運算子是一種簡潔的條件運算符,用於根據條件的真偽來選擇不同的值或執行不同的操作。他的優勢在於簡潔性和可讀性,特別是在需要將不同的值賦給一個變數時,可以幫助簡化程式碼,不過運用過多反而會降低可讀性。
(條件) ? 值1 : 值2;
// 如果條件成立,則返回值1,否則返回值2。
int x = 10;
int y = 5;
int result = (x > y) ? x : y; // 如果x大於y,result等於x;否則等於y
double openPrice = ...; // 假設有開盤價格
double stopLoss = ...; // 假設有止損價格
double takeProfit = ...; // 假設有止盈價格
if (condition) {
int ticket = OrderSend(Symbol(), OP_BUY, 1.0, openPrice, 3, stopLoss, takeProfit, "", 0, clrNONE);
Print((ticket > 0) ? "買單已下單,單號:" + ticket : "買單下單失敗"); //根據OrderSend函數的返回值(訂單號或錯誤碼)來輸出相應的消息。
}
通常用於簡化多個if-else語句的結構,特別是在需要基於特定值執行不同操作的情況下。這提高了程式碼的可讀性和維護性,特別是當有多個可能的分支。
int day = 2;
switch (day) {
case 1:
// 如果day等於1,執行這裡的程式碼
break;
case 2:
// 如果day等於2,執行這裡的程式碼
break;
case 3:
// 如果day等於3,執行這裡的程式碼
break;
default:
// 如果day不等於上述任何一個值,執行這裡的程式碼
}
交易策略中的多條件判斷:需要根據不同的市場條件來執行不同的交易操作時,switch語句可以非常有用。可以根據不同的技術指標信號來執行不同的交易策略。
處理多種交易指令:在自動交易中,可能需要處理多種不同的交易指令,如買入、賣出、修改訂單等。switch可以根據接收到的指令來執行相應的操作。
多個操作的選擇:當需要根據特定條件從多個操作中進行選擇時,switch可以實現這種多分支邏輯,提高代碼的可讀性。
處理不同的時間框架或周期:在某些交易策略中,根據不同的時間框架或周期執行不同的操作可能很常見。可以用於根據時間框架來調整策略行為。
迴圈運算子用於多次執行相同或類似的操作,並允許在達到特定條件後終止。
又稱前測式迴圈,是MQL5中最簡單的一個迴圈。while迴圈首先檢查條件是否成立。如果條件成立,則執行迴圈內的程式碼區塊,然後再次檢查條件。只要條件持續成立,迴圈就會繼續執行。當條件不再成立時,迴圈停止執行並繼續執行迴圈後的程式碼。
int count = 0;
while (count < 5)
{
Print("迴圈迭代次數:" + IntegerToString(count));
count++; // 增加計數器的值,以便退出迴圈
}
while 迴圈通常用於不確定迭代次數的情況,因為它在每次迭代前檢查條件是否成立。需要謹慎使用,以避免無限迴圈,確保條件能夠在某個時間點變為false,否則迴圈將永遠不會停止。
又稱後側式迴圈,與while幾乎一樣,差別只在於while是先判斷條件再執行迴圈,而do-while是先執行迴圈再判斷。也因為他會先執行一次,所以通常用於需要至少執行一次的情況
int count = 0;
do
{
Print("迴圈迭代次數:" + IntegerToString(count));
count++; // 增加計數器的值
}
while (count < 5);
此範例與while迴圈之範例相同,同樣要避免無限迴圈。而在MQL5中使用的情況與While相同。
用於執行特定的程式碼區塊,並在每次迭代時進行計數或遞增/遞減操作。通常用於已知迭代次數的情況,此運算子包含三個由分號分隔的運算式。
for (int i = 0; i < 5; i++)
{
// 這段程式碼將執行5次,i的值從0到4
Print("迴圈迭代次數:" + IntegerToString(i));
}
break可以立即跳出最近的迴圈(switch亦可),而continue類似於break,但不算完全退出迴圈,而是退出當次迴圈進到下一輪迴圈。
若迴圈如前幾個範例,在count==3時,break會讓最終輸出為0,1,2
而在count==3時,continue則會輸出0,1,2,4